// 导入$console方法
const { $console } = require('../utils/tips')

// 导入数据库
const db = require('../db/index')

// 导入密码hash、验证
const { passToHash, validatePass } = require('../utils/validation')

/**
 * 在这里定义饿用户相关的路由处理函数,供 /router/user.js 模块进行调用
 */

// 用户注册的处理函数
exports.reguser = (req, res) => {
  const { username, password } = req.body
  // 判断用户名、密码是否合法
  if (!username || !password) {
    if (!username) {
      res.send({ state: 1, msg: '用户名不能为空' })
    } else if (!password) {
      res.send({ state: 1, msg: '密码不能为空' })
    }
  } else {
    //  检测是否重名
    db.query(
      'select * from yoniro_user where username = ?',
      [username],
      (err, results) => {
        if (err) {
          return res.send({ status: 1, msg: err.message })
        } else if (results.length > 0) {
          return res.send({ status: 1, msg: '用户名重复请更换其他用户名!' })
        }
        else {
          // 插入新用户
          db.query(
            'insert yoniro_user set ?',
            { username, password: passToHash(password) },
            (err, results) => {
              if (err) {
                return res.send({ status: 1, msg: err.message })
              } else if (results.affectedRows !== 1) {
                return res.send({ status: 1, msg: '注册失败请稍后再试！' })
              } else {
                return res.send({ status: 0, msg: '注册成功' })
              }
            }
          )
        }
      }
    )
  }
}

// 用户登录的处理函数
exports.login = (req, res) => {
  const { username, password } = req.body
  db.query(
    'select password from yoniro_user where username = ?',
    [username],
    (err, results) => {
      if (err) { // sql查询错误
        return res.send({ status: 1, msg: err.message })
      } else if (results.length == 1) { // 匹配用户成功
        if (validatePass(password, results[0].password)) {
          return res.send({ status: 0, msg: '登录成功' })
        } else {
          return res.send({ status: 1, msg: '密码错误，请重试' })
        }
      } else if (results.length != 1) { // 匹配用户失败
        if (results.length == 0) {
          return res.send({ status: 1, msg: '用户名不存在' })
        } else {
          $console('数据库数据有误')
          return res.send({ status: 1, msg: '数据库内部错位，请稍后重试' })
        }
      }
    }
  )
}